package ar.uba.fi.celdas.ponderador;

public class Matriz {
	float[][] valores;
	int dimension;
	
	public int getDimension() {
		return dimension;
	}

	public Matriz(int dimension){
		valores = new float[dimension][dimension];
		this.dimension=dimension;
		ponerEnCero();
	}
	
	public void ponerEnCero(){
		for(int i=0;i<dimension;i++){
			for(int j=0;j<dimension;j++){
				valores[i][j]=0;
			}
		}
	}
	
	//tienen que ser de igual dimension. Cuadradas.
	public Matriz multiplicar(Matriz otraMatriz){
		Matriz resultado=new Matriz(this.dimension);
		int i,j;
		
		for(i=0;i<dimension;i++){
			float suma=0;
			for(j=0;j<dimension;j++){
				suma=multYSuma(this.getFila(i),otraMatriz.getColumna(j));
				
				resultado.setPos(i,j, suma);
			}
			
		}
		
		return resultado;
	}
	
	private float multYSuma(float[] fila, float[] columna) {
		float result=0;
		for(int i=0;i<fila.length;i++){
			result+=fila[i]*columna[i];
		}
		return result;
	}

	private float[] getColumna(int j) {
		float[] result=new float[dimension];
		for(int i=0;i<dimension;i++){
			result[i]=valores[i][j];
		}
		return result;
	}
	
	private float[] getFila(int i) {
		return valores[i];
	}

	public void setPos(int fila, int col, float valor){
		this.valores[fila][col]=valor;
	}
	
	public float getPos(int fila, int col){
		return this.valores[fila][col];
	}
	
	public void imprimirMatriz(){
		
		for(int i=0;i<dimension;i++){
			System.out.print("|");
			for(int j=0;j<dimension;j++){
				System.out.print(valores[i][j]);
				System.out.print("|");
			}
			System.out.println();
		}
		
	}
	
}
